#ifndef REGISTRO_H_
#define REGISTRO_H_

#include "Componente.h"
#include "../Constantes.h"
#include "../Bytes.h"

class Bytes;
class Objeto;

class Registro: public Componente {

protected:
	Bytes dato;
	bool vivo;

public:

	/*
	 * Pre: -
	 * Pos: Crea una instancia.
	 */
	Registro(const Bytes& dato);
	virtual ~Registro();

	/*
	 * Pre: -
	 * Pos: Serializa el estado del objeto.
	 */
	virtual Bytes serializarse() = 0;

	/*
	 * Pre: -
	 * Pos: Hidrata el estado del registro.
	 */
	virtual void hidratarse(const Bytes& componente) = 0;

	/*
	 * Pre: -
	 * Pos: Setea el dato del registro.
	 */
	void setDato(const Bytes& dato);

	/*
	 * Pre: -
	 * Pos: Devuelve el dato del registro.
	 */
	Bytes getDato() const;

	/*
	 * Pre: -
	 * Pos: Devuelve true si el estado esta vivo.
	 */
	bool estaVivo() const;

	/*
	 * Pre: -
	 * Pos: Mata el registro.
	 */
	void matar();

	/*
	 * Pre: -
	 * Pos: Devuelve el tamanio del registro serializado.
	 */
	virtual cantBytes getTamanioSerializado() = 0;
};

#endif /* REGISTRO_H_ */
